<!-- HTML header for doxygen 1.8.18-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Ipopt: Documentation</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  $(document).ready(function() { init_search(); });
/* @license-end */
</script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script>
<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js"></script>
<link href="stylesheet.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 40px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Ipopt Documentation
   &#160;<!--span id="projectnumber">3.14.12</span-->
   </div>
  </td>
   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
</td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('index.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="PageDoc"><div class="header">
  <div class="headertitle">
<div class="title">Documentation </div>  </div>
</div><!--header-->
<div class="contents">
<div class="toc"><h3>Table of Contents</h3>
<ul><li class="level1"><a href="#Overview">Overview</a><ul><li class="level2"><a href="#MATHBACKGROUND">Mathematical Background</a></li>
<li class="level2"><a href="#AVAILABILITY">Availability</a></li>
<li class="level2"><a href="#PREREQUISITES">Prerequisites</a></li>
<li class="level2"><a href="#HOWTOUSE">How to use Ipopt</a></li>
<li class="level2"><a href="#MOREINFO">More Information and Contributions</a></li>
<li class="level2"><a href="#HISTORY_IPOPT">History of Ipopt</a></li>
<li class="level2"><a href="#HISTORY_DOC">History of this document</a></li>
</ul>
</li>
</ul>
</div>
<div class="textblock"><p>This document is a guide to using Ipopt. It includes instructions on how to obtain and compile Ipopt, a description of the interface, user options, etc., as well as a tutorial on how to solve a nonlinear optimization problem with Ipopt. The documentation consists of the following pages:</p>
<ul>
<li><a class="el" href="index.html#Overview">Overview</a></li>
<li><a class="el" href="INSTALL.html">Installing Ipopt</a></li>
<li><a class="el" href="INTERFACES.html">Interfacing your NLP to Ipopt</a></li>
<li><a class="el" href="SPECIALS.html">Special Features</a></li>
<li><a class="el" href="OPTIONS.html">Ipopt Options</a></li>
<li><a class="el" href="OUTPUT.html">Ipopt Output</a></li>
<li><a class="el" href="IMPL.html">Implementation Details</a></li>
<li><a class="el" href="FAQ.html">Frequenty Asked Questions</a></li>
<li><a class="el" href="md_ChangeLog.html">ChangeLog</a></li>
<li><a class="el" href="AUTHORS.html">Authors and Contributors</a></li>
<li><a class="el" href="LICENSE.html">License</a></li>
</ul>
<p>The Ipopt project website is <a href="https://github.com/coin-or/Ipopt">https://github.com/coin-or/Ipopt</a>.</p>
<h1><a class="anchor" id="Overview"></a>
Overview</h1>
<p>Ipopt (<b>I</b>nterior <b>P</b>oint <b>O</b>ptimizer, pronounced "Eye-Pea-Opt") is an open source software package for large-scale nonlinear optimization. It can be used to solve general nonlinear programming problems of the form<a class="anchor" id="NLP"></a> </p><p class="formulaDsp">
\begin{align} \min_{x\in\mathbb{R}^n} &amp;&amp; f(x) \nonumber \\ \text{s.t.} \; &amp;&amp; g^L \leq g(x) \leq g^U \tag{NLP} \\ &amp;&amp; x^L \leq x \leq x^U, \nonumber \end{align}
</p>
<p> where \(x \in \mathbb{R}^n\) are the optimization variables (possibly with lower and upper bounds, \(x^L\in(\mathbb{R}\cup\{-\infty\})^n\) and \(x^U\in(\mathbb{R}\cup\{+\infty\})^n\)) with \(x^L \leq x^U\), \(f:\mathbb{R}^n \to \mathbb{R}\) is the objective function, and \(g:\mathbb{R}^n \to \mathbb{R}^m\) are the general nonlinear constraints. The functions \(f(x)\) and \(g(x)\) can be linear or nonlinear and convex or non-convex (but should be twice continuously differentiable). The constraint functions, \(g(x)\), have lower and upper bounds, \(g^L\in(\mathbb{R}\cup\{-\infty\})^m\) and \(g^U\in(\mathbb{R}\cup\{+\infty\})^m\) with \(g^L \leq g^U\). Note that equality constraints of the form \(g_i(x)=\bar g_i\) can be specified by setting \(g^L_{i}=g^U_{i}=\bar g_i\).</p>
<h2><a class="anchor" id="MATHBACKGROUND"></a>
Mathematical Background</h2>
<p>Ipopt implements an interior point line search filter method that aims to find a local solution of <a class="el" href="index.html#NLP">(NLP)</a>. The mathematical details of the algorithm can be found in several publications <a class="el" href="citelist.html#CITEREF_NocWaeWal:adaptive">[7]</a>, <a class="el" href="citelist.html#CITEREF_WaechterPhD">[13]</a>, <a class="el" href="citelist.html#CITEREF_WaecBieg06:mp">[12]</a>, <a class="el" href="citelist.html#CITEREF_WaeBie05:filterglobal">[11]</a>, <a class="el" href="citelist.html#CITEREF_WaeBie05:filterlocal">[10]</a>.</p>
<h2><a class="anchor" id="AVAILABILITY"></a>
Availability</h2>
<p>The Ipopt package is available from <a href="http://www.coin-or.org">COIN-OR</a> under the EPL (Eclipse Public License) open-source license and includes the source code for Ipopt. This means, it is available free of charge, also for commercial purposes. However, if you give away software including Ipopt code (in source code or binary form) and you made changes to the Ipopt source code, you are required to make those changes public and to clearly indicate which modifications you made. After all, the goal of open source software is the continuous development and improvement of software. For details, please refer to the <a href="https://opensource.org/licenses/EPL-2.0">Eclipse Public License</a>.</p>
<p>Also, if you are using Ipopt to obtain results for a publication, we politely ask you to point out in your paper that you used Ipopt, and to cite the publication <a class="el" href="citelist.html#CITEREF_WaecBieg06:mp">[12]</a>. Writing high-quality numerical software takes a lot of time and effort, and does usually not translate into a large number of publications, therefore we believe this request is only fair :). We also have space in the <a href="https://github.com/coin-or/Ipopt/discussions/497">Ipopt usage stories and papers</a> discussion where we list publications, projects, etc., in which Ipopt has been used. We would be very happy to hear about your experiences.</p>
<h2><a class="anchor" id="PREREQUISITES"></a>
Prerequisites</h2>
<p>In order to build Ipopt, some third party components are required:</p>
<ul>
<li><p class="startli">BLAS (Basic Linear Algebra Subroutines) and LAPACK (Linear Algebra PACKage). Many vendors of compilers and operating systems provide precompiled and optimized libraries for these dense linear algebra subroutines. You can also get the source code for a simple reference implementation from <a href="http://www.netlib.org">http://www.netlib.org</a>. However, it is strongly recommended to use some optimized BLAS and LAPACK implementations, for large problems this can make a runtime difference of an order of magnitude!</p>
<p class="startli">Examples for efficient BLAS implementations are:</p><ul>
<li>Generic:<ul>
<li><a href="https://github.com/xianyi/OpenBLAS">OpenBLAS</a>, BSD license</li>
<li><a href="https://github.com/flame/blis">BLIS</a> (BLAS-like Library Instantiation Software Framework), BSD license</li>
<li><a href="http://math-atlas.sourceforge.net/">ATLAS</a> (Automatically Tuned Linear Algebra Software), BSD license</li>
</ul>
</li>
<li>From hardware vendors:<ul>
<li><a href="https://developer.apple.com/documentation/accelerate">Accelerate</a> Framework by Apple</li>
<li><a href="https://github.com/amd/blis">BLIS fork</a> (BLAS-like Library Instantiation Software Framework) by AMD</li>
<li><a href="https://www.ibm.com/docs/en/essl">ESSL</a> (Engineering Scientific Subroutine Library) by IBM</li>
<li><a href="https://software.intel.com/content/www/us/en/develop/tools/math-kernel-library.html">MKL</a> (Math Kernel Library) by Intel</li>
<li><a href="https://docs.oracle.com/cd/E18659_01/html/821-2763/gjgis.html">Sun Performance Library</a> by Sun</li>
</ul>
</li>
</ul>
<p class="startli">Note: BLAS libraries distributed with Linux were often not optimized in the past. Nowadays, OpenBLAS is often found in Linux distributions, but you should check.</p>
</li>
<li><p class="startli">A sparse symmetric indefinite linear solver. Ipopt needs to obtain the solution of sparse, symmetric, indefinite linear systems, and for this it relies on third-party code.</p>
<p class="startli">Currently, the following linear solvers can be used:</p><ul>
<li>MA27 from the <a href="http://www.hsl.rl.ac.uk">HSL Mathematical Software Library</a></li>
<li>MA57 from the <a href="http://www.hsl.rl.ac.uk">HSL Mathematical Software Library</a></li>
<li>HSL_MA77 from the <a href="http://www.hsl.rl.ac.uk">HSL Mathematical Software Library</a></li>
<li>HSL_MA86 from the <a href="http://www.hsl.rl.ac.uk">HSL Mathematical Software Library</a></li>
<li>HSL_MA97 from the <a href="http://www.hsl.rl.ac.uk">HSL Mathematical Software Library</a></li>
<li><a href="http://mumps.enseeiht.fr">MUMPS</a> (MUltifrontal Massively Parallel sparse direct Solver)</li>
<li>PARDISO (Parallel Sparse Direct Solver) from <a href="http://www.pardiso-project.org">Pardiso Project</a> or Intel MKL. Note that current versions from Pardiso Project typically offer much better performance than the one from Intel MKL.</li>
<li><a href="https://github.com/ralna/spral">SPRAL</a> (Sparse Parallel Robust Algorithms Library)</li>
<li><a href="http://researcher.ibm.com/view_project.php?id=1426">WSMP</a> (Watson Sparse Matrix Package)</li>
</ul>
<p class="startli">You must include at least one of the linear solvers above in order to run Ipopt, and if you want to be able to switch easily between different alternatives, you can compile Ipopt with interfaces to all of them. The linear solvers from HSL and Pardiso Project can also be loaded from a shared library at runtime, see <a class="el" href="INSTALL.html#LINEARSOLVERLOADER">Providing a HSL library at runtime</a> and <a class="el" href="INSTALL.html#DOWNLOAD_PARDISO">Pardiso from Pardiso Project</a>. For the latter, this is also the only option.</p>
<dl class="section note"><dt>Note</dt><dd>The solution of the linear systems is a central ingredient in Ipopt and the optimizer's performance and robustness depends on your choice. The best choice depends on your application, and it makes sense to try different options, but solvers from HSL or Pardiso Project are often a good choice. Most of the solvers also rely on efficient BLAS code (see above), so you should use a good BLAS library tailored to your system. Please keep this in mind, particularly when you are comparing Ipopt with other optimization codes. See also <a class="el" href="citelist.html#CITEREF_Tasseff2019">[9]</a> for a comparison of <a class="el" href="namespaceIpopt.html" title="This file contains a base class for all exceptions and a set of macros to help with exceptions.">Ipopt</a> with various linear solvers.</dd></dl>
<p>If you are compiling MA57, HSL_MA77, HSL_MA86, HSL_MA97, MUMPS, or SPRAL within the Ipopt build system, you should also include the METIS linear system ordering package.</p>
<p class="startli">Interfaces to other linear solvers might be added in the future; if you are interested in contributing such an interface please contact us! Note that Ipopt requires that the linear solver is able to provide the inertia (number of positive and negative eigenvalues) of the symmetric matrix that is factorized.</p>
</li>
<li>Furthermore, Ipopt can also use the HSL package MC19 for scaling of the linear systems before they are passed to the linear solver. This may be particularly useful if Ipopt is used with MA27 or MA57. However, it is not required to have MC19; if this routine is missing, scaling is not performed.</li>
<li>ASL (AMPL Solver Library). The source code is available at <a href="http://www.netlib.org">http://www.netlib.org</a>, and COIN-OR's <a href="https://github.com/coin-or-tools/ThirdParty-ASL">ThirdParty-ASL project</a> can be used to build a library that is recognized by Ipopt's build system. NOTE: This is only required if you want to use Ipopt from AMPL and want to compile the Ipopt AMPL solver executable.</li>
</ul>
<p>For more information on third-party components and how to obtain them, see <a class="el" href="INSTALL.html#EXTERNALCODE">Download, build, and install dependencies</a>.</p>
<p>Since the Ipopt code is written in C++, you will need a C++ compiler to build the Ipopt library. We tried very hard to write the code as platform and compiler independent as possible.</p>
<p>In addition, the configuration script also searches for a Fortran compiler. If all third party dependencies are available as self-contained libraries and no Ipopt/Fortran interface needs to be build, a Fortran compile is not necessary.</p>
<p>When using GNU compilers, we recommend you use the same version numbers for gcc, g++, and gfortran. Further, mixing clang (for C/C++) and gfortran has been problematic and should be avoided.</p>
<h2><a class="anchor" id="HOWTOUSE"></a>
How to use Ipopt</h2>
<p>If desired, the Ipopt distribution generates an executable for the modeling environment AMPL. As well, you can link your problem statement with Ipopt using interfaces for C++, C, Java, or Fortran. Ipopt can be used with most Linux/Unix environments, and on Windows using Msys2/MinGW. In <a class="el" href="INTERFACES.html">Interfacing your NLP to Ipopt</a> this document demonstrates how to solve problems using Ipopt. This includes installation and compilation of Ipopt for use with AMPL as well as linking with your own code. An installation of the AMPL link to Ipopt is also available on <a href="https://neos-server.org/neos/solvers/nco:Ipopt/AMPL.html">NEOS</a>.</p>
<p>Additionally, the Ipopt distribution includes an interface for the R project for statistical computing, see <a class="el" href="INTERFACES.html#INTERFACE_R">The R Interface ipoptr</a>.</p>
<p>There is also software that facilitates use of Ipopt maintained by other people, among them are:</p>
<ul>
<li><p class="startli"><a href="https://github.com/coin-or/ADOL-C">ADOL-C</a> (automatic differentiation)</p>
<p class="startli">ADOL-C facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. It comes with <a href="https://github.com/coin-or/ADOL-C/tree/master/ADOL-C/examples/additional_examples/ipopt">examples</a> that show how to use it in connection with Ipopt.</p>
</li>
<li><p class="startli">AIMMS (modeling environment)</p>
<p class="startli">The <a href="https://github.com/coin-or/AIMMSlinks">AIMMSlinks project</a> on COIN-OR, maintained by Marcel Hunting, provides an interface for Ipopt within the AIMMS modeling tool.</p>
</li>
<li><p class="startli"><a href="http://apmonitor.com">APMonitor</a></p>
<p class="startli">MATLAB, Python, and Web Interface to Ipopt for Android, Linux, macOS, and Windows.</p>
</li>
<li><p class="startli"><a href="http://casadi.org">CasADi</a></p>
<p class="startli">CasADi is a symbolic framework for automatic differentiation and numeric optimization and comes with Ipopt.</p>
</li>
<li><p class="startli"><a href="https://github.com/coin-or/CppAD">CppAD</a> (automatic differentiation)</p>
<p class="startli">Given a C++ algorithm that computes function values, CppAD generates an algorithm that computes corresponding derivative values (of arbitrary order using either forward or reverse mode). It comes with an <a href="https://coin-or.github.io/CppAD/doc/ipopt_solve.htm">example</a> that shows how to use it in connection with Ipopt.</p>
<p class="startli">It is also possible to use <a class="el" href="namespaceIpopt.html" title="This file contains a base class for all exceptions and a set of macros to help with exceptions.">Ipopt</a> via <a href="https://bradbell.github.io/cppad_py/doc/xsrst/cppad_py.html">CppADs Python interface</a>. An example is available <a href="https://bradbell.github.io/cppad_py/doc/xsrst/mixed_optimize_fixed_2_py.html">here</a>.</p>
</li>
<li><p class="startli"><a href="https://github.com/cureos/csipopt">csipopt</a></p>
<p class="startli">Interfacing <a class="el" href="namespaceIpopt.html" title="This file contains a base class for all exceptions and a set of macros to help with exceptions.">Ipopt</a> from .NET languages such as <b>C#</b>, <b>F#</b> and <b>Visual Basic.NET</b>.</p>
</li>
<li><p class="startli"><a href="https://github.com/mechmotum/cyipopt">cyipopt</a></p>
<p class="startli">A <b>Python</b> wrapper around Ipopt with a SciPy-style interface.</p>
</li>
<li><p class="startli">GAMS (modeling environment)</p>
<p class="startli">The <a href="https://github.com/coin-or/GAMSlinks">GAMSlinks project</a> on COIN-OR includes a GAMS interface for Ipopt.</p>
<p class="startli">An installation of GAMS with Ipopt is also available on <a href="https://neos-server.org/neos/solvers/nco:Ipopt/GAMS.html">NEOS</a>.</p>
</li>
<li><p class="startli"><a href="https://github.com/ethz-adrl/ifopt">ifopt</a></p>
<p class="startli">Modern, light-weight (~1k loc), <b>Eigen</b>-based <b>C++</b> interface to Ipopt and Snopt.</p>
</li>
<li><p class="startli"><a href="https://gitlab.com/g-braeunlich/ipyopt">IPyOpt</a></p>
<p class="startli">Interfacing Ipopt from <b>Python</b>.</p>
</li>
<li><p class="startli"><a href="http://juliaopt.org">JuliaOpt</a></p>
<p class="startli">Julia is a high-level, high-performance dynamic programming language for technical computing. JuliaOpt, is an umbrella group for Julia-based optimization-related projects. It includes the algebraic modeling language <a href="https://github.com/JuliaOpt/JuMP.jl">JuMP</a> and an <a href="https://github.com/JuliaOpt/Ipopt.jl">interface to Ipopt</a>.</p>
</li>
<li><p class="startli"><a href="https://github.com/stanle/madopt">MADOPT</a> (Modelling and Automatic Differentiation for Optimisation)</p>
<p class="startli">Light-weight C++ and Python modelling interfaces implementing expression building using operator overloading and automatic differentiation.</p>
</li>
<li><p class="startli"><a href="https://github.com/ebertolazzi/mexIPOPT">mexIPOPT</a></p>
<p class="startli">Matlab (mex) interface to you use Ipopt from Matlab.</p>
</li>
<li><p class="startli"><a href="http://www.i2c2.aut.ac.nz/Wiki/OPTI/">OPTimization Interface (OPTI) Toolbox</a></p>
<p class="startli">OPTI is a free <b>Matlab</b> toolbox for constructing and solving linear, nonlinear, continuous and discrete optimization problem and comes with Ipopt, including binaries.</p>
</li>
<li><p class="startli"><a href="https://github.com/coin-or/OS">Optimization Services</a></p>
<p class="startli">The Optimization Services (OS) project provides a set of standards for representing optimization instances, results, solver options, and communication between clients and solvers, including&#160;Ipopt, in a distributed environment using Web Services.</p>
</li>
<li><p class="startli"><a href="https://www.scilab.org/">Scilab</a> (free Matlab-like environment):</p>
<p class="startli">A Scilab interface is available at <a href="https://atoms.scilab.org/toolboxes/sci_ipopt">https://atoms.scilab.org/toolboxes/sci_ipopt</a>.</p>
</li>
</ul>
<h2><a class="anchor" id="MOREINFO"></a>
More Information and Contributions</h2>
<p>An issue tracking and discussion system can be found at the Ipopt homepage,</p>
<p><a href="https://github.com/coin-or/Ipopt">https://github.com/coin-or/Ipopt</a>.</p>
<p>Ipopt is an open source project, and we encourage people to contribute code (such as interfaces to appropriate linear solvers, modeling environments, or even algorithmic features). If you are interested in contributing code, please have a look at the <a href="http://www.coin-or.org/contributions.html">COIN-OR contributions webpage</a> and contact the Ipopt project leader.</p>
<p>There also has been a mailing list for Ipopt. Its archive (2002-2020) is available from the webpage</p>
<p><a href="https://list.coin-or.org/pipermail/ipopt/">https://list.coin-or.org/pipermail/ipopt/</a>.</p>
<p>An easy way to search the archive with Google is to specify <code>site:http://list.coin-or.org/pipermail/ipopt</code> in addition to your keywords in the search string.</p>
<p>A short tutorial on getting started with Ipopt is also available <a class="el" href="citelist.html#CITEREF_Waechter90Minutes">[14]</a>.</p>
<h2><a class="anchor" id="HISTORY_IPOPT"></a>
History of Ipopt</h2>
<p>The original Ipopt(Fortran version) was a product of the dissertation research of Andreas Wächter <a class="el" href="citelist.html#CITEREF_WaechterPhD">[13]</a>, under the supervision of Lorenz T. Biegler at the Chemical Engineering Department at Carnegie Mellon University. The code was made open source and distributed by the COIN-OR initiative, which is now a non-profit corporation. Ipopt has been actively developed under COIN-OR since 2002.</p>
<p>To continue natural extension of the code and allow easy addition of new features, IBM Research decided to invest in an open source re-write of Ipopt in C++. With the help of Carl Laird, who came to the Mathematical Sciences Department at IBM Research as a summer intern in 2004 and 2005 during his PhD studies, the code was re-implemented from scratch.</p>
<p>The new C++ version of the Ipopt optimization code (Ipopt 3.0.0 and beyond) was maintained at IBM Research and remains part of the COIN-OR initiative. The development on the Fortran version has ceased, but the source code can still be downloaded from <a href="https://github.com/coin-or/Ipopt/tree/stable/2.3">https://github.com/coin-or/Ipopt/tree/stable/2.3</a>.</p>
<h2><a class="anchor" id="HISTORY_DOC"></a>
History of this document</h2>
<p>The initial version of this document was created by Yoshiaki Kawajir (then Department of Chemical Engineering, Carnegie Mellon University, Pittsburgh PA) as a course project for <em>47852 Open Source Software for Optimization</em>, taught by Prof. François Margot at Tepper School of Business, Carnegie Mellon University. After this, Carl Laird (then Department of Chemical Engineering, Carnegie Mellon University, Pittsburgh PA) has added significant portions, including the very nice tutorials. The current version is maintained by Stefan Vigerske (GAMS Software GmbH) and Andreas Wächter (Department of Industrial Engineering and Management Sciences, Northwestern University).</p>
<p>The following names used in this document are trademarks or registered trademarks: Apple, AMPL, IBM, Intel, Matlab, Microsoft, MKL, Visual Studio C++, Visual Studio C++ .NET </p>
</div></div><!-- PageDoc -->
</div><!-- contents -->
</div><!-- doc-content -->
</body>
</html>
